//TODO:不同请求方法整理,不同状态码整理
# 介绍
Web 的应用层协议是超文本传输协议(HyperText Transfer Protocol, HTTP),是 Web 的核心
HTTP 由两个程序实现,一个客户程序,一个服务器程序。客户程序与服务器程序运行在不同的端系统中,通过 HTTP 报文进行会话。 HTTP 定义了这些报文的结构以及客户服务器进行报文交换的方式
工作方式
- HTTP 使用 TCP 作为支撑运输协议,TCP 为 HTTP 提供可靠数据传输服务
- 客户首先发起一个与服务器的 TCP 连接
- 一旦连接建立,客户通过它的 socket 接口发送 HTTP 请求报文并从 socket 接口中接收 HTTP 响应报文
- 类似地,服务器通过它的 socket 接口接收请求报文和发送响应报文
因为 HTTP 服务器不保存关于客户的任何信息,所以也说 HTTP 是一个无状态协议
术语
- Web 页面:也叫文档,由对象组成
- 对象:一个对象只是一个文件,如一个 HTML 文件、一个 JPG 文件,可以通过一个 URL 地址寻址
- URL 地址:一个 URL 地址由两部分组成,存放对象地服务器主机名 + 对象地路径名
# 非持续连接和持续连接
HTTP 协议在默认方式下使用持续连接,但是客户和服务器也能配置成使用非持续连接
# 1. 非持续连接的 HTTP
- 客户发起一个到服务器的 TCP 连接
- 客户向服务器发送 HTTP 请求报文
- 服务器接收请求报文,发送响应报文
- 服务器通知 TCP 断开该 TCP 连接(直到 TCP 确认客户已经完整地收到响应报文,才会实际中断连接)
- 客户接收响应报文,TCP 连接关闭
对于非持续连接,每个 TCP 连接在服务器发送一个对象后关闭,每个 TCP 连接只传输一个请求报文和一个响应报文
从发起请求到收到文件地整体时间可以通过往返时间(Round-Trip Time,RTT)来衡量。TCP 连接三次握手前两次占用一个 RTT 时间,客户结合第三次握手(确认)向该 TCP 连接发送一个 HTTP 请求,因此总的时间约等于 2 个 RTT 时间加上服务器传输 HTML 文件的时间
# 2. 持续连接的 HTTP
非持续连接问题:(1)为每个请求维护一个全新连接,服务器负担太沉重;(2)每一个对象需要经过两倍 RTT 时间交付
- 采用持续连接的情况下,服务器在发送响应后保持 TCP 连接打开,相同客户和服务器间的后续请求通过同一个连接进行
- 客户可以以流水线的形式,不间断发出请求,而不必等待上一个请求处理完成再发送下一个
- 如果一条连接经过一定时间仍未被使用, HTTP 服务器则关闭该连接
# HTTP 报文格式
# 1. HTTP 请求报文
1. 请求行:包含用于请求的方法、请求的 URL 和 HTTP 版本。方法能够取值: GET、POST、HEAD、PUT、DELETE
2. 首部字段:由多组键值对组成,通过冒号分割,保存了有关请求的重要信息
3. 实体主体:与首部字段用空行(CR + LF)隔开,用于保存被发送的数据,可以为空
# 2. HTTP 响应报文
1. 状态行:包含 HTTP 版本、表明响应结果的状态码和原因短语
2. 首部字段:与请求报文类似,同样由多组键值对组成
3. 实体主体:与首部字段用空行(CR + LF)隔开,用于保存被发送的数据,可以为空
# Cookie
HTTP 服务器是无状态的,简化了服务器的设计,有助于开发高性能的 Web 服务器。然而一个 Web 站点通常希望能够识别用户,为此 HTTP 使用了 cookie 技术
cookie 技术的4个组件
- HTTP 响应报文中一个 cookie 首部字段(Set-cookie)
- HTTP 请求报文中一个 cookie 首部字段(Cookie)
- 用户端系统中一个 cookie 文件,由用户浏览器进行管理
- 位于 Web 站点的一个后端数据库
# Web 缓存
Web 缓存器也叫代理服务器,能够代表初始 Web 服务器来满足 HTTP 请求的网络实体
通过配置,客户对某对象的访问将被定向到 Web 缓存器,Web 缓存器既是服务器也是客户
工作方式
- 客户建立一个到 Web 缓存器的 TCP 连接,向 Web 缓存器发送一个请求某对象的 HTTP 请求
- Web 缓存器检查自身,查看本地是否存储了该对象副本,如果有,则使用 HTTP 响应报文返回该对象
- 如果没有,Web 缓存器打开一个与初始服务器对象的 TCP 连接,并发送一个请求该对象的 HTTP 请求。收到请求后,初始服务器向 Web 缓存器发送具有该对象的 HTTP 响应报文
- Web 缓存器接收到该对象后,在本地存储一份对象副本,并向客户端使用 HTTP 响应报文发送对象
作用
- 能够减少对客户请求的响应时间
- 能够减少一个机构的接入链路到因特网的通信量
提示
尽管高速缓存带来了诸多便利,但也存在问题,缓存中的对象副本可能过期。
针对这个问题,可以使用条件 GET 方法解决
← 介绍 FTP、SMTP 协议 →